home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-09 | 4.3 KB | 145 lines | [TEXT/CWIE] |
- // Release Version: $ ODF 2 $
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
-
- //========================================================================================
- #include "Talker.hpp"
-
- #ifndef CONTENT_H
- #include "Content.h"
- #endif
-
- #ifndef PART_H
- #include "Part.h"
- #endif
-
- #ifndef FWKIND_H
- #include "FWKind.h"
- #endif
-
- #ifndef SOM_DevUniv_STalker_xh
- #include "STalker.xh" // for STalker
- #endif
-
- //========================================================================================
- #ifdef FW_BUILD_MAC
- #pragma segment Talker
- #endif
-
- //========================================================================================
- const FW_Boolean kWaitUntilDone = TRUE;
-
- //========================================================================================
- FW_DEFINE_AUTO(CTalkerContent)
-
- //----------------------------------------------------------------------------------------
- CTalkerContent::CTalkerContent(Environment* ev, CTalkerPart* part) :
- FW_CContent(ev, part),
- fTextBuffer(NULL),
- fTextBytes(0),
- fTalkerPart(part),
- fSOMTalker(NULL)
- {
- fSOMTalker = new DevUniv_STalker;
- fSOMTalker->SayString(ev, "ODF", !kWaitUntilDone); // say it!
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- CTalkerContent::~CTalkerContent()
- {
- FW_START_DESTRUCTOR
- delete fSOMTalker;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- }
-
- //----------------------------------------------------------------------------------------
- void
- CTalkerContent::ExternalizeKind(Environment* ev,
- ODStorageUnit* storageUnit,
- FW_CKind* kind,
- FW_StorageKinds storageKind,
- FW_CPromise* promise,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(cloneInfo);
- FW_UNUSED(storageKind);
- FW_UNUSED(promise);
-
- if (kind->IsPartKind(ev))
- {
- FW_PStorageUnitSink suSink(ev, storageUnit, kODPropContents, kind->GetType(ev));
- FW_CWritableStream stream(suSink);
- stream << fTextBytes;
- stream.Write(fTextBuffer, fTextBytes);
- }
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::InternalizeKind(Environment* ev,
- ODStorageUnit* sourceSU,
- FW_CKind* kind,
- FW_StorageKinds storageKind,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(cloneInfo);
- FW_UNUSED(storageKind);
- FW_Boolean internalized = false;
- if (kind->IsPartKind(ev))
- internalized = this->MyInternalizePartKind(ev, sourceSU, kind->GetType(ev));
- else if (kind->IsEqual(ev, 'TEXT', kODPlatformDataType))
- internalized = this->MyInternalizeTextData(ev, sourceSU, kind->GetType(ev));
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::MyInternalizePartKind(Environment* ev, ODStorageUnit* sourceSU, ODType valueType)
- {
- FW_Boolean internalized = false;
- FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
- if (suSink->GetReadableBytes(ev) != 0) {
- FW_CReadableStream stream(suSink);
- stream >> fTextBytes;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- stream.Read(fTextBuffer, fTextBytes);
- internalized = true;
- }
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::MyInternalizeTextData(Environment* ev, ODStorageUnit* sourceSU, ODType valueType)
- {
- FW_Boolean internalized = false;
- FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
- ODULong bytes = suSink->GetReadableBytes(ev);
- if (bytes >= 0) {
- FW_CReadableStream stream(suSink);
- fTextBytes = bytes;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- stream.Read(fTextBuffer, fTextBytes);
- internalized = true;
- this->MySayText(ev);
- }
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- void
- CTalkerContent::MySayText(Environment* ev)
- {
- fSOMTalker->SayText(ev, (char*)fTextBuffer, fTextBytes, !kWaitUntilDone); // say it!
- }
-
- //----------------------------------------------------------------------------------------
- DevUniv_STalker*
- CTalkerContent::MyGetTalker()
- {
- return fSOMTalker;
- }
-